//============================================================================================
/**
 * @file	mb_main.c
 * @brief	メールボックス画面 メイン処理
 * @author	Hiroyuki Nakamura
 * @date	09.01.31
 */
//============================================================================================
#include "common.h"

#include "system/arc_util.h"
#include "system/fontproc.h"
#include "system/pmfprint.h"
#include "poketool/pokeparty.h"
#include "msgdata/msg.naix"
#include "msgdata/msg_mailbox_app.h"

#include "mb_main.h"
#include "mb_seq.h"
#include "mb_bmp.h"

#include "mailbox_gra.naix"
#include "mail_gra.naix"


//============================================================================================
//	定数定義
//============================================================================================
#define	BGWF_MAILBTN_SX			( 14 )
#define	BGWF_MAILBTN_SY			( 4 )
#define	BGWF_MAILBTN_PX			( 1 )
#define	BGWF_MAILBTN_PY			( 0 )
#define	BGWF_MAILBTN_SPACE_X	( 16 )
#define	BGWF_MAILBTN_SPACE_Y	( 4 )

#define	BGWF_SELMAIL_PX			( 4 )		// 選択したメールタブ表示Ｘ座標
#define	BGWF_SELMAIL_PY			( 7 )		// 選択したメールタブ表示Ｙ座標

// ボタン背景キャラ位置
#define	BTN_U_BACK_CGX_POS	( 0x07 * 0x20 )
#define	BTN_D_BACK_CGX_POS	( 0x0b * 0x20 )

#define	EXP_BUF_SIZE		( 1024 )	// 汎用文字列展開領域サイズ

#define	SELBOX_LIST_NUM		( MBMAIN_MENU_MAX )		// 選択ボックス項目数

#define	SELBOX_PX	( 18 )	// メニュー表示Ｘ座標
#define	SELBOX_PY_4	( 5 )	// メニュー表示Ｙ座標（４項目）
#define	SELBOX_PY_3	( 11 )	// メニュー表示Ｙ座標（２項目）
#define	SELBOX_SX	( 11 )	// メニューＸサイズ


//============================================================================================
//	プロトタイプ宣言
//============================================================================================
static u32 MailMenuMaxGet( MAILBOX_SYS_WORK * syswk );


//============================================================================================
//	グローバル変数
//============================================================================================

// VRAM割り振り
static const GF_BGL_DISPVRAM VramTbl = {
	GX_VRAM_BG_128_B,				// メイン2DエンジンのBG
	GX_VRAM_BGEXTPLTT_NONE,			// メイン2DエンジンのBG拡張パレット

	GX_VRAM_SUB_BG_128_C,			// サブ2DエンジンのBG
	GX_VRAM_SUB_BGEXTPLTT_NONE,		// サブ2DエンジンのBG拡張パレット

	GX_VRAM_OBJ_64_E,				// メイン2DエンジンのOBJ
	GX_VRAM_OBJEXTPLTT_NONE,		// メイン2DエンジンのOBJ拡張パレット

	GX_VRAM_SUB_OBJ_16_I,			// サブ2DエンジンのOBJ
	GX_VRAM_SUB_OBJEXTPLTT_NONE,	// サブ2DエンジンのOBJ拡張パレット

	GX_VRAM_TEX_0_A,				// テクスチャイメージスロット
	GX_VRAM_TEXPLTT_01_FG			// テクスチャパレットスロット
};

// 選択ボックスヘッダデータ
static const SELBOX_HEAD_PRM SelBoxHedParam = {
	TRUE,					// ループ
	SBOX_OFSTYPE_CENTER,	// センタリング
	0,						// Ｘ座標表示オフセット
	MBMAIN_BGF_MSG_M,		// 表示ＢＧ
	MBMAIN_MBG_PAL_SELBOX,	// パレット
	0,						// BGプライオリティ ( ? )
	0,						// ソフトウェアプライオリティ ( ?? )
	MBMAIN_SELBOX_CGX_NUM,	// 文字列領域cgx(キャラ単位)
	MBMAIN_SELBOX_FRM_NUM,	// フレーム領域cgx(キャラ単位)
	MBMAIN_SELBOX_CGX_SIZ,	// 占有するcgx領域サイズ(キャラ単位)
};



//--------------------------------------------------------------------------------------------
/**
 * VBLANK関数
 *
 * @param	work	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_VBlank( void * work )
{
	MAILBOX_SYS_WORK * syswk = work;

	GF_BGL_VBlankFunc( syswk->app->bgl );

	CATS_RenderOamTrans();

	OS_SetIrqCheckFlag( OS_IE_V_BLANK );
}

//--------------------------------------------------------------------------------------------
/**
 * VRAM設定
 *
 * @param	none
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_VramInit(void)
{
	GF_Disp_SetBank( &VramTbl );
}

//--------------------------------------------------------------------------------------------
/**
 * ＢＧ初期化
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_BgInit( MAILBOX_SYS_WORK * syswk )
{
	syswk->app->bgl = GF_BGL_BglIniAlloc( HEAPID_MAILBOX_APP );

	{	// BG SYSTEM
		GF_BGL_SYS_HEADER sysh = {
			GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BGMODE_0, GX_BG0_AS_2D,
		};
		GF_BGL_InitBG( &sysh );
	}
	{	// メイン画面：メールメッセージ
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x18000, GX_BG_EXTPLTT_01,
			0, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_MAILMES_S, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_MAILMES_S );
		GF_BGL_ClearCharSet( MBMAIN_BGF_MAILMES_S, 0x20, 0, HEAPID_MAILBOX_APP );
	}
	{	// メイン画面：メール背景
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xf000, GX_BG_CHARBASE_0x10000, GX_BG_EXTPLTT_01,
			1, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_MAIL_S, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_MAIL_S );
		GF_BGL_ClearCharSet( MBMAIN_BGF_MAIL_S, 0x20, 0, HEAPID_MAILBOX_APP );
	}
	{	// メイン画面：文字
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xe800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01,
			2, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_STR_S, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_STR_S );
		GF_BGL_ClearCharSet( MBMAIN_BGF_STR_S, 0x20, 0, HEAPID_MAILBOX_APP );
	}
	{	// メイン画面：背景
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xe000, GX_BG_CHARBASE_0x08000, GX_BG_EXTPLTT_01,
			2, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_BG_S, &cnth, GF_BGL_MODE_TEXT );
	}

	{	// サブ画面：メッセージ
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x18000, GX_BG_EXTPLTT_01,
			0, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_MSG_M, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_MSG_M );
		GF_BGL_ClearCharSet( MBMAIN_BGF_MSG_M, 0x20, 0, HEAPID_MAILBOX_APP );
	}
	{	// サブ画面：文字
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xf000, GX_BG_CHARBASE_0x10000, GX_BG_EXTPLTT_01,
			1, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_STR_M, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_STR_M );
		GF_BGL_ClearCharSet( MBMAIN_BGF_STR_M, 0x20, 0, HEAPID_MAILBOX_APP );
	}
	{	// サブ画面：ボタン
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xe800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01,
			2, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_BTN_M, &cnth, GF_BGL_MODE_TEXT );
		GF_BGL_ScrClear( syswk->app->bgl, MBMAIN_BGF_BTN_M );
	}
	{	// サブ画面：背景
		GF_BGL_BGCNT_HEADER cnth= {
			0, 0, 0x800, 0, GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0xe000, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01,
			3, 0, 0, FALSE
		};
		GF_BGL_BGControlSet( syswk->app->bgl, MBMAIN_BGF_BG_M, &cnth, GF_BGL_MODE_TEXT );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * ＢＧ解放
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_BgExit( MAILBOX_SYS_WORK * syswk )
{
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_BG_M );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_BTN_M );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_STR_M );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_MSG_M );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_BG_S );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_STR_S );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_MAIL_S );
	GF_BGL_BGControlExit( syswk->app->bgl, MBMAIN_BGF_MAILMES_S );

	sys_FreeMemoryEz( syswk->app->bgl );
}

//--------------------------------------------------------------------------------------------
/**
 * ＢＧグラフィック読み込み
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_BgGraphicLoad( MAILBOX_SYS_WORK * syswk )
{
	ARCHANDLE * ah = ArchiveDataHandleOpen( ARC_MAILBOX_GRA, HEAPID_MAILBOX_APP );

	ArcUtil_HDL_BgCharSet(
		ah, NARC_mailbox_gra_mailbox_u_lz_NCGR,
		syswk->app->bgl, MBMAIN_BGF_BG_S, 0, 0, TRUE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_ScrnSet(
		ah, NARC_mailbox_gra_mailbox_u_lz_NSCR,
		syswk->app->bgl, MBMAIN_BGF_BG_S, 0, 0, TRUE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_PalSet(
		ah, NARC_mailbox_gra_mailbox_u_NCLR, PALTYPE_SUB_BG, 0, 0, HEAPID_MAILBOX_APP );

	ArcUtil_HDL_BgCharSet(
		ah, NARC_mailbox_gra_mailbox_d_lz_NCGR,
		syswk->app->bgl, MBMAIN_BGF_BG_M, 0, 0, TRUE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_BgCharSet(
		ah, NARC_mailbox_gra_mailbox_d_lz_NCGR,
		syswk->app->bgl, MBMAIN_BGF_STR_M, 0, 0, TRUE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_ScrnSet(
		ah, NARC_mailbox_gra_mailbox_d_lz_NSCR,
		syswk->app->bgl, MBMAIN_BGF_BG_M, 0, 0, TRUE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_PalSet(
		ah, NARC_mailbox_gra_mailbox_d_NCLR, PALTYPE_MAIN_BG, 0, 0, HEAPID_MAILBOX_APP );

	{	// ボタン背景取得
		NNSG2dCharacterData * chr;
		void * buf;
		u8 * cgx;

		buf = ArcUtil_HDL_CharDataGet(
				ah, NARC_mailbox_gra_mailbox_d_lz_NCGR, 1, &chr, HEAPID_MAILBOX_APP );
		cgx = chr->pRawData;
		MI_CpuCopy32( &cgx[BTN_U_BACK_CGX_POS], &syswk->app->btn_back_cgx[0x00], 0x20 );
		MI_CpuCopy32( &cgx[BTN_D_BACK_CGX_POS], &syswk->app->btn_back_cgx[0x20], 0x20 );
		sys_FreeMemoryEz( buf );
	}

	ArchiveDataHandleClose( ah );
}

//--------------------------------------------------------------------------------------------
/**
 * ウィンドウ読み込み
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_WindowLoad( MAILBOX_SYS_WORK * syswk )
{
	MAILBOX_APP_WORK * appwk;
	WINTYPE	wt;

	appwk = syswk->app;
	wt    = CONFIG_GetWindowType( syswk->config );

	// 会話ウィンドウ
	TalkWinGraphicSet(
		appwk->bgl, MBMAIN_BGF_MSG_M,
		MBMAIN_TALKWIN_CGX_POS, MBMAIN_MBG_PAL_TALKWIN, wt, HEAPID_MAILBOX_APP );
	TalkFontPaletteLoad( PALTYPE_MAIN_BG, MBMAIN_MBG_PAL_TALKFNT * 32, HEAPID_MAILBOX_APP );

	// システムフォントパレット
	SystemFontPaletteLoad( PALTYPE_MAIN_BG, MBMAIN_MBG_PAL_SYSFNT * 32, HEAPID_MAILBOX_APP );
	SystemFontPaletteLoad( PALTYPE_SUB_BG, MBMAIN_SBG_PAL_SYSFNT * 32, HEAPID_MAILBOX_APP );
}

//--------------------------------------------------------------------------------------------
/**
 * BGWINFRM初期化
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_BgWinFrmInit( MAILBOX_SYS_WORK * syswk )
{
	u16 * scrn1;
	u16 * scrn2;
	u32	i;

	syswk->app->wfrm = BGWINFRM_Create(
						syswk->app->bgl,
						BGWINFRM_TRANS_VBLANK, MBMAIN_BGWF_MAX, HEAPID_MAILBOX_APP );

	// メール選択ボタン
	for( i=0; i<MBMAIN_MAILLIST_MAX; i++ ){
		BGWINFRM_Add(
			syswk->app->wfrm, MBMAIN_BGWF_BUTTON1+i,
			MBMAIN_BGF_BTN_M, BGWF_MAILBTN_SX, BGWF_MAILBTN_SY );
	}

	// 選択されたメール
	BGWINFRM_Add(
		syswk->app->wfrm, MBMAIN_BGWF_SELMAIL,
		MBMAIN_BGF_STR_M, BGWF_MAILBTN_SX, BGWF_MAILBTN_SY );


	// スクリーンデータロード
	BGWINFRM_FrameSetArc(
		syswk->app->wfrm, MBMAIN_BGWF_BUTTON1,
		ARC_MAILBOX_GRA, NARC_mailbox_gra_mailbox_win_lz_NSCR, TRUE );

	scrn1 = BGWINFRM_FrameBufGet( syswk->app->wfrm, MBMAIN_BGWF_BUTTON1 );

	for( i=MBMAIN_BGWF_BUTTON1+1; i<=MBMAIN_BGWF_SELMAIL; i++ ){
		scrn2 = BGWINFRM_FrameBufGet( syswk->app->wfrm, i );
		MI_CpuCopy8( scrn1, scrn2, BGWF_MAILBTN_SX*BGWF_MAILBTN_SY*2 );
	}

	// ボタン配置
	for( i=0; i<MBMAIN_MAILLIST_MAX; i++ ){
		BGWINFRM_FramePut(
			syswk->app->wfrm, MBMAIN_BGWF_BUTTON1+i,
			BGWF_MAILBTN_PX + ( BGWF_MAILBTN_SPACE_X * (i&1) ),
			BGWF_MAILBTN_PY + ( BGWF_MAILBTN_SPACE_Y * (i>>1) ) );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * BGWINFRM解放
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_BgWinFrmExit( MAILBOX_SYS_WORK * syswk )
{
	BGWINFRM_Exit( syswk->app->wfrm );
}

//--------------------------------------------------------------------------------------------
/**
 * メッセージ関連初期化
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MsgInit( MAILBOX_APP_WORK * appwk )
{
	appwk->mman   = MSGMAN_Create(
						MSGMAN_TYPE_NORMAL, ARC_MSG, NARC_msg_mailbox_app_dat, HEAPID_MAILBOX_APP );
	appwk->wset   = WORDSET_Create( HEAPID_MAILBOX_APP );
	appwk->expbuf = STRBUF_Create( EXP_BUF_SIZE, HEAPID_MAILBOX_APP );

	MsgPrintTouchPanelFlagSet( 1 );
}

//--------------------------------------------------------------------------------------------
/**
 * メッセージ関連解放
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MsgExit( MAILBOX_APP_WORK * appwk )
{
	MsgPrintTouchPanelFlagSet( 0 );

	STRBUF_Delete( appwk->expbuf );
	WORDSET_Delete( appwk->wset );
	MSGMAN_Delete( appwk->mman );
}

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえ処理初期化
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_YesNoWinInit( MAILBOX_SYS_WORK * syswk )
{
	syswk->app->tsw = TOUCH_SW_AllocWork( HEAPID_MAILBOX_APP );
}

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえ処理解放
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_YesNoWinExit( MAILBOX_SYS_WORK * syswk )
{
	TOUCH_SW_FreeWork( syswk->app->tsw );
}

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえセット
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_YesNoWinSet( MAILBOX_SYS_WORK * syswk )
{
	TOUCH_SW_PARAM	prm;

	prm.p_bgl     = syswk->app->bgl;
	prm.bg_frame  = MBMAIN_BGF_MSG_M;
	prm.char_offs = MBMAIN_YNWIN_CGX_POS;
	prm.pltt_offs = MBMAIN_MBG_PAL_YNWIN;
	prm.x         = 25;
	prm.y         = 10;
	prm.kt_st     = 0;
	prm.key_pos   = 0;
	prm.type      = TOUCH_SW_TYPE_S;

	TOUCH_SW_Init( syswk->app->tsw, &prm );
}

//--------------------------------------------------------------------------------------------
/**
 * 選択ボックス作成
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_SelBoxInit( MAILBOX_SYS_WORK * syswk )
{
	u32	max;
	u16	i, j;

	syswk->app->selbox = SelectBoxSys_AllocWork( HEAPID_MAILBOX_APP, NULL );

	max = MailMenuMaxGet( syswk );

	syswk->app->sblist = BMP_MENULIST_Create( max, HEAPID_MAILBOX_APP );

	for( i=0; i<SELBOX_LIST_NUM; i++ ){
		if( max == 2 ){
			if( i == MBMAIN_MENU_POKESET || i == MBMAIN_MENU_DELETE ){
				continue;
			}
		}
		BMP_MENULIST_AddArchiveString( syswk->app->sblist, syswk->app->mman, msg_menu01+i, i );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * 選択ボックス削除
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_SelBoxExit( MAILBOX_SYS_WORK * syswk )
{
	BMP_MENULIST_Delete( syswk->app->sblist );
	SelectBoxSys_Free( syswk->app->selbox );
}

//--------------------------------------------------------------------------------------------
/**
 * 選択ボックス表示
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_SelBoxPut( MAILBOX_SYS_WORK * syswk )
{
	SELBOX_HEADER	hd;

	hd.prm   = SelBoxHedParam;
	hd.list  = syswk->app->sblist;
	hd.bgl   = syswk->app->bgl;
	hd.count = MailMenuMaxGet( syswk );

	if( hd.count == SELBOX_LIST_NUM ){
		syswk->app->sbwk = SelectBoxSet(
							syswk->app->selbox, &hd, APP_END_KEY,
							SELBOX_PX, SELBOX_PY_4, SELBOX_SX, 0 );
	}else{
		syswk->app->sbwk = SelectBoxSet(
							syswk->app->selbox, &hd, APP_END_KEY,
							SELBOX_PX, SELBOX_PY_3, SELBOX_SX, 0 );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * 選択ボックス非表示
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_SelBoxDel( MAILBOX_SYS_WORK * syswk )
{
	SelectBoxExit( syswk->app->sbwk );
}

//--------------------------------------------------------------------------------------------
/**
 * メールデータ取得
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MailDataInit( MAILBOX_SYS_WORK * syswk )
{
	u32	i;

	syswk->app->mail_max = 0;

	for( i=0; i<MAIL_STOCK_MAX; i++ ){
		syswk->app->mail_list[i] = MBMAIN_MAILLIST_NULL;

		syswk->app->mail[i] = MAIL_AllocMailData(
								syswk->sv_mail, MAILBLOCK_PASOCOM, i, HEAPID_MAILBOX_APP );

		// メールリスト作成
		if( MailData_IsEnable(syswk->app->mail[i]) == TRUE ){
			syswk->app->mail_list[syswk->app->mail_max] = i;
			syswk->app->mail_max++;
		}
	}

	if( syswk->app->mail_max == 0 ){
		syswk->app->page_max = 0;
	}else{
		syswk->app->page_max = (syswk->app->mail_max-1) / MBMAIN_MAILLIST_MAX;
	}
}

//--------------------------------------------------------------------------------------------
/**
 * メールデータ解放
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MailDataExit( MAILBOX_SYS_WORK * syswk )
{
	u32	i;

	for( i=0; i<MAIL_STOCK_MAX; i++ ){
		sys_FreeMemoryEz( syswk->app->mail[i] );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * メール選択ボタン初期化
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MailButtonInit( MAILBOX_SYS_WORK * syswk )
{
	u8 * lst;
	u16	pos;
	u16	win;
	u16	frm;
	u16	i;

	pos = syswk->sel_page * MBMAIN_MAILLIST_MAX;
	lst = &syswk->app->mail_list[ pos ];
	win = MBMAIN_BMPWIN_ID_MAIL01 + pos;
	frm = MBMAIN_BGWF_BUTTON1;

	for( i=0; i<MBMAIN_MAILLIST_MAX; i++ ){
		if( lst[i] == MBMAIN_MAILLIST_NULL ){
			BGWINFRM_FrameOff( syswk->app->wfrm, frm );
		}else{
			MBBMP_MailButtonSet( syswk, frm, win, lst[i] );
			BGWINFRM_FrameOn( syswk->app->wfrm, frm );
		}
		win++;
		frm++;
	}
}

//--------------------------------------------------------------------------------------------
/**
 * 選択したメールのタブ表示
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_SelMailTabPut( MAILBOX_SYS_WORK * syswk )
{
	MBBMP_MailButtonSet(
		syswk, MBMAIN_BGWF_SELMAIL,
		MBMAIN_BMPWIN_ID_SELMAIL, syswk->lst_pos );

	BGWINFRM_FramePut( syswk->app->wfrm, MBMAIN_BGWF_SELMAIL, BGWF_SELMAIL_PX, BGWF_SELMAIL_PY );
}

//--------------------------------------------------------------------------------------------
/**
 * ボタンアニメ処理
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @retval	"TRUE = アニメ中"
 * @retval	"FALSE = それ以外"
 */
//--------------------------------------------------------------------------------------------
BOOL MBMAIN_ButtonAnmMain( MAILBOX_SYS_WORK * syswk )
{
	BUTTON_ANM_WORK * bawk = &syswk->app->bawk;

	switch( bawk->btn_seq ){
	case 0:
		if( bawk->btn_mode == MBMAIN_BTN_ANM_MODE_OBJ ){
			CATS_ObjectPaletteSetCap( syswk->app->cap[bawk->btn_id], bawk->btn_pal1 );
		}else{
			GF_BGL_ScrPalChange(
				syswk->app->bgl, bawk->btn_id,
				bawk->btn_px, bawk->btn_py, bawk->btn_sx, bawk->btn_sy, bawk->btn_pal1 );
			GF_BGL_LoadScreenV_Req( syswk->app->bgl, bawk->btn_id );
		}
		bawk->btn_seq++;
		break;

	case 1:
		bawk->btn_cnt++;
		if( bawk->btn_cnt != 4 ){ break; }
		if( bawk->btn_mode == MBMAIN_BTN_ANM_MODE_OBJ ){
			CATS_ObjectPaletteSetCap( syswk->app->cap[bawk->btn_id], bawk->btn_pal2 );
		}else{
			GF_BGL_ScrPalChange(
				syswk->app->bgl, bawk->btn_id,
				bawk->btn_px, bawk->btn_py, bawk->btn_sx, bawk->btn_sy, bawk->btn_pal2 );
			GF_BGL_LoadScreenV_Req( syswk->app->bgl, bawk->btn_id );
		}
		bawk->btn_cnt = 0;
		bawk->btn_seq++;
		break;

	case 2:
		bawk->btn_cnt++;
		if( bawk->btn_cnt == 2 ){
			return FALSE;
		}
	}

	return TRUE;
}

//--------------------------------------------------------------------------------------------
/**
 * メールグラフィック読み込み
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void MBMAIN_MailGraphcLoad( MAILBOX_SYS_WORK * syswk )
{
	ARCHANDLE * ah;
	u32	pat;

	ah  = ArchiveDataHandleOpen( ARC_MAIL_GRA, HEAPID_MAILBOX_APP );
	pat = MailData_GetDesignNo( syswk->app->mail[ syswk->lst_pos ] );

	ArcUtil_HDL_BgCharSet(
		ah, NARC_mail_gra_mail_000_ncgr+pat,
		syswk->app->bgl, MBMAIN_BGF_MAIL_S, 0, 0, FALSE, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_PalSet(
		ah, NARC_mail_gra_mail_000_nclr+pat, PALTYPE_SUB_BG, 0, 0x20*2, HEAPID_MAILBOX_APP );
	ArcUtil_HDL_ScrnSet(
		ah, NARC_mail_gra_mail_000_nscr+pat,
		syswk->app->bgl, MBMAIN_BGF_MAIL_S, 0, 0, FALSE, HEAPID_MAILBOX_APP );

	ArchiveDataHandleClose( ah );
}

//--------------------------------------------------------------------------------------------
/**
 * メールのメニュー数取得
 *
 * @param	syswk	メールボックス画面システムワーク
 *
 * @return	メニュー数
 *
 *	手持ちがポケモンがいないときは「もたせる」と「けす」を表示しない
 */
//--------------------------------------------------------------------------------------------
static u32 MailMenuMaxGet( MAILBOX_SYS_WORK * syswk )
{
	if( PokeParty_GetPokeCount( SaveData_GetTemotiPokemon(syswk->dat->savedata) ) > 0 ){
		return SELBOX_LIST_NUM;
	}
	return ( SELBOX_LIST_NUM - 2 );
}